﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using KPWeb.Class;
using KPWeb.Function;
using KPWeb.Slowniki;

namespace KPWeb.Data
{
    public class Osoby
    {
        public vKP_Osoby GetDaneOsoby(int jednostkaID, int osobaID)
        {  // podajemy ID jednostki GŁÓWNEJ lub podjednostki
            using (DBContainer db = new DBContainer())
            {
                vKP_Osoby aTemp = db.vKP_Osoby.Where(
                    a => (a.JednostkaID == jednostkaID ||a.JednostkaGlownaID==jednostkaID)
                        && a.OsobaID == osobaID).SingleOrDefault();
                return (aTemp);
            }
        }
        public static int GetOsobaID(string pesel)
        {
            using (DBContainer db = new DBContainer())
            {
                int iTemp = db.KP_Uprawnienia.Where(a => a.Pesel == pesel).Count();
                return (iTemp == 0 ? -1 : db.KP_Uprawnienia.Where(a => a.Pesel == pesel && a.Uprawnienia=="M").Single().OsobaID);
            }
        }

        public static int GetGrupaIDDlaOsobaID(int osobaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_Osoby.Where(a => a.OsobaID == osobaID).Single().GrupaID);
            }
        }
        public static int GetOsobaIDzKP_Osoby(string pesel)
        {
            using (DBContainer db = new DBContainer())
            {
                int iTemp = db.vKP_Osoby.Where(a => a.Pesel == pesel).Count();
                return (iTemp == 0 ? -1 : db.vKP_Osoby.Where(a => a.Pesel == pesel).Single().OsobaID);
            }
        }
        public static int GetOsobaJednostkaID(int osobaID)
        {
            using (DBContainer db = new DBContainer())
            {

                return (db.vKP_Osoby.Where(a => a.OsobaID == osobaID).Single().JednostkaID);
            }
        }
        public static IEnumerable<vKP_Osoby> GetListaOsob( int jednostkaID, int grupaID)
        {
            using (DBContainer db = new DBContainer())
            {
                IEnumerable<vKP_Osoby> aTemp = db.vKP_Osoby.Where(a => a.JednostkaID == jednostkaID && a.GrupaID == grupaID).ToArray();
                return (aTemp);
            }
        }
        public static IEnumerable<vKP_OsobyPlanyUrlopow> GetListaOsobPlanyUrlopow(int jednostkaID, int grupaID, int year)
        {
            using (DBContainer db = new DBContainer())
            {
                IEnumerable<vKP_OsobyPlanyUrlopow> aTemp = db.vKP_OsobyPlanyUrlopow.Where(a => a.JednostkaID == jednostkaID
                    && a.GrupaID == grupaID && (a.Year==year|| a.Year==0)).OrderBy(a=>a.NazwiskoImie).ToArray();
                //IEnumerable<vKP_OsobyPlanyUrlopow> bTemp=null;
                //foreach (vKP_OsobyPlanyUrlopow item in aTemp)
                //{
                //    bTemp.item;
                //   // item.NazwiskoImie=FunctionGlobal.UppercaseFirstWords(item.NazwiskoImie);
                //}
                              
                return (aTemp);
            }
        }
        public static int UpdateJednostkaGlowna(int jednostkaID, int jednostkaGlownaID)
        // jednostkę podajemy główną lub O gdy dotyczy koordynatora
        {
            using (DBContainer db = new DBContainer())
            {
                try
                {
                    var wiz = db.KP_JednostkiFirmy.Where(a => a.JednostkaID == jednostkaID && a.active=="t").Single();
                    wiz.JednostkaGlownaID = jednostkaGlownaID;
                   
                    db.SaveChanges();
                    return 0;
                }
                catch (Exception e)
                {
                    return -1;
                }
            }
        }
  
   //   //KARTA PRACY  
   //public static bool JestKartaPracyDlaOsobyWDniu(int osobaID, DateTime kartaDzien)
   //     {
   //         using (DBContainer db = new DBContainer())
   //         {
           
   //                 return  (from wiz in db. KP_WyjsciaOdpracowaniaNadgodziny.Where(a => a.OsobaID == osobaID &&
   //                     a.PlanowanyPowrot==kartaDzien && a.TypWyjsciaID==Stale.kartaPracyTypID)
   //                         select wiz).Count()==1;
           
   //         }
   //     }

   //public static vKP_WyjsciaOdpracowaniaNadgodziny[] GetKartaPracyDlaOsoby(int osobaID, DateTime odData, DateTime doData)
   //{
   //    using (DBContainer db = new DBContainer())
   //    {
         
   //            return (from wiz in db.vKP_WyjsciaOdpracowaniaNadgodziny.Where(a => a.OsobaID == osobaID &&
   //               DateTime.Compare(a.OdData, odData) >= 0 && DateTime.Compare(a.OdData, doData) <= 0 
   //               && a.TypWyjsciaID == Stale.kartaPracyTypID && a.Stan == 0).OrderBy(a => a.PlanowanyPowrot)
   //                    select wiz).ToArray();
   //    }
   //}

   //public int InsertUpdateKartaPracy(int osobaID, byte typWyjsciaID,
   //       DateTime odData, DateTime doData, DateTime kartaDzien, int czasWMinutach, byte stan, int? OsobaIDSkasowała)
   ////-1 błąd zapisu
   ////ID utworzonego rekordu  WyjsciaOdpracowaniaNadgodziny, 0 update
   //{
   //    using (DBContainer db = new DBContainer())
   //    {
   //        try
   //        {
   //            if (!JestKartaPracyDlaOsobyWDniu(osobaID, kartaDzien))
   //            {
   //                KP_WyjsciaOdpracowaniaNadgodziny e = new KP_WyjsciaOdpracowaniaNadgodziny();
   //                e.OsobaID = osobaID;
   //                e.TypWyjsciaID = typWyjsciaID;
   //                e.OdData = odData;
   //                e.DoData = doData;
   //                e.PlanowanyPowrot = kartaDzien;
   //                e.CzasWMinutach = czasWMinutach;
   //                e.Stan = stan;
   //                e.DataUtworzenia = DateTime.Now;
   //                e.active = "t";
   //                e.OsobaIDSkasowała = OsobaIDSkasowała;
   //                db.KP_WyjsciaOdpracowaniaNadgodziny.AddObject(e);
   //                db.SaveChanges();

   //                return e.WyjsciaID;
   //            }
   //            else
   //            {
   //                var wiz = db.KP_WyjsciaOdpracowaniaNadgodziny.Where(a => a.OsobaID == osobaID &&
   //                   a.PlanowanyPowrot == kartaDzien && a.TypWyjsciaID == Stale.kartaPracyTypID).Single();

   //                wiz.OdData = odData;
   //                wiz.DoData = doData;
   //                wiz.CzasWMinutach = czasWMinutach;
   //                wiz.DataUtworzenia = DateTime.Now;
   //                wiz.OsobaIDSkasowała = OsobaIDSkasowała;

   //                db.SaveChanges();
   //            }
   //            return 0;
   //        }
   //        catch (Exception e)
   //        {
   //            return -1;
   //        }

   //    }
   //}
   //public int InsertKartaPracy(int osobaID, byte typWyjsciaID, DateTime odData, DateTime doData,
   //            DateTime kartaDzien, int czasWMinutach, byte stan, int? OsobaIDSkasowała)
   // //-1 błąd zapisu
   // //ID utworzonego rekordu  WyjsciaOdpracowaniaNadgodziny, 0 update
   // {
   //     using (DBContainer db = new DBContainer())
   //     {
   //         try
   //         {
   //                 KP_WyjsciaOdpracowaniaNadgodziny e = new KP_WyjsciaOdpracowaniaNadgodziny();
   //                 e.OsobaID = osobaID;
   //                 e.TypWyjsciaID = typWyjsciaID;
   //                 e.OdData = odData;
   //                 e.DoData = doData;
   //                 e.PlanowanyPowrot = kartaDzien;
   //                 e.CzasWMinutach = czasWMinutach;
   //                 e.Stan = stan;
   //                 e.DataUtworzenia = DateTime.Now;
   //                 e.active = "t";
   //                 e.OsobaIDSkasowała = OsobaIDSkasowała;
   //                 db.KP_WyjsciaOdpracowaniaNadgodziny.AddObject(e);
   //                 db.SaveChanges();

   //                 return e.WyjsciaID;
   //          }
   //         catch (Exception e)
   //         {
   //             return -1;
   //         }

   //     }
   // }

   //     public static int DeleteKartaPracy(int osobaID, DateTime kartaOd, DateTime kartaDo)
   //     {
   //         using (DBContainer db = new DBContainer())
   //         {
   //             try
   //             {
   //                 var items = db.KP_WyjsciaOdpracowaniaNadgodziny.Where(a => a.OsobaID == osobaID && a.TypWyjsciaID == Stale.kartaPracyTypID &&
   //                     a.PlanowanyPowrot >= kartaOd && a.PlanowanyPowrot <= kartaDo);

   //                 foreach (KP_WyjsciaOdpracowaniaNadgodziny item in items)
   //                 {
   //                     db.KP_WyjsciaOdpracowaniaNadgodziny.DeleteObject(item);

   //                 }
   //                 db.SaveChanges();

   //                 return 0;
   //             }
   //             catch (Exception e)
   //             {
   //                 return -1;
   //             }


   //         }
   //     }
   //     public static int DeleteKartaPracyDzien(int osobaID, DateTime kartaDzien)
   //     {
   //         using (DBContainer db = new DBContainer())
   //         {
   //             try
   //             {
   //                 var item = db.KP_WyjsciaOdpracowaniaNadgodziny.Where(a => a.OsobaID == osobaID && a.TypWyjsciaID == Stale.kartaPracyTypID &&
   //                     a.PlanowanyPowrot ==kartaDzien).Single();

   //                db.KP_WyjsciaOdpracowaniaNadgodziny.DeleteObject(item);

   //                 db.SaveChanges();

   //                 return 0;
   //             }
   //             catch (Exception e)
   //             {
   //                 return -1;
   //             }


   //         }
   //     }
    }
}